// 不使用 ReturnType 实现 TypeScript 的 ReturnType<T> 泛型。
const fn = (v: boolean) => {
  if (v)
    return 1
  else
    return 2
}
type MyReturnType<T> = T extends (...args: any) => infer P ? P : never
// 解题思路
// 重点是”ts如何表示待推断的类型变量？“答案就是 infer，在类型变量前加上infer即可。
// 第二点是”如何约束传参为函数？“函数类型为 (...args: any) => infer P，约束使用extends，即T extends (...args: any) => infer P。

type a = MyReturnType<typeof fn> // 应推导出 "1 | 2"
